import type {
  FavoriteAddCompanyBySearchForm,
  FavoriteAddCompanyForm,
  FavoriteDistinctForm,
  FavoriteForm,
  FavoriteMergeForm,
  FavoriteQuery,
  FavoriteVO,
} from './model';

import type { ID, IDS, PageResult } from '#/api/common';

import { commonExport } from '#/api/helper';
import { requestClient } from '#/api/request';

/**
 * 分页查询公司收藏夹列表
 * @param params
 * @returns 公司收藏夹列表
 */
export function favoritePage(params?: FavoriteQuery) {
  return requestClient.get<PageResult<FavoriteVO>>('/company/favorite/page', {
    params,
  });
}

/**
 * 查询公司收藏夹列表
 * @param params
 * @returns 公司收藏夹列表
 */
export function favoriteList(params?: FavoriteQuery) {
  return requestClient.get<FavoriteVO[]>('/company/favorite/list', {
    params,
  });
}

/**
 * 导出公司收藏夹列表
 * @param params
 * @returns 公司收藏夹列表
 */
export function favoriteExport(params?: FavoriteQuery) {
  return commonExport('/company/favorite/export', params ?? {});
}

/**
 * 查询公司收藏夹详情
 * @param id id
 * @returns 公司收藏夹详情
 */
export function favoriteInfo(id: ID) {
  return requestClient.get<FavoriteVO>(`/company/favorite/${id}`);
}

/**
 * 新增公司收藏夹
 * @param data
 * @returns void
 */
export function favoriteAdd(data: FavoriteForm) {
  return requestClient.postWithMsg<void>('/company/favorite', data);
}

/**
 * 更新公司收藏夹
 * @param data
 * @returns void
 */
export function favoriteUpdate(data: FavoriteForm) {
  return requestClient.putWithMsg<void>('/company/favorite', data);
}

/**
 * 删除公司收藏夹
 * @param id id
 * @returns void
 */
export function favoriteRemove(id: ID | IDS) {
  return requestClient.deleteWithMsg<void>(`/company/favorite/${id}`);
}

/**
 * 收藏夹去重
 * @param data
 */
export function favoriteDistinct(data: FavoriteDistinctForm) {
  return requestClient.postWithMsg<void>(
    `/company/favorite/member/distinct`,
    data,
  );
}

/**
 * 收藏夹批量合并
 * @param data
 */
export function favoriteMerge(data: FavoriteMergeForm) {
  return requestClient.postWithMsg<void>(
    `/company/favorite/member/merge`,
    data,
  );
}

/**
 * 批量添加企业到收藏夹
 * @param data
 */
export function favoriteAddCompany(data: FavoriteAddCompanyForm) {
  return requestClient.postWithMsg<void>(`/company/favorite/member/add`, data);
}

/**
 * 按筛选条件添加企业到收藏夹
 * @param data
 */
export function favoriteAddCompanyBySearch(
  data: FavoriteAddCompanyBySearchForm,
) {
  return requestClient.postWithMsg<void>(
    `/company/favorite/member/addBySearch`,
    data,
  );
}

/**
 * 从收藏夹中移除企业
 * @param data
 */
export function favoriteRemoveCompany(data: FavoriteAddCompanyForm) {
  return requestClient.postWithMsg<void>(
    `/company/favorite/member/remove`,
    data,
  );
}

/**
 * 查询收藏夹中的重复企业数量
 * @param ids
 */
export function favoriteFindRepeatCount(ids: IDS) {
  return requestClient.post<number | string>(
    `/company/favorite/member/findRepeatCount`,
    ids,
  );
}

/**
 * 修改状态
 * @param data
 */
export function favoriteChangeStatus(data: Partial<FavoriteVO>) {
  const requestData = {
    id: data.id,
    status: data.status,
  };
  return requestClient.putWithMsg<void>(
    `/company/favorite/changeStatus`,
    requestData,
  );
}
